📹 K8s本身僅提供部分metrics監控功能 (addon),而且其儲存屬於in-memory,資料非持久性儲存,不過設計遵循CNCF監控與分析的OpenMetrics
標準,所以相容外部開源軟體像是Prometheus及Datadog等,可以藉此取得更完整的監控機制,
Metrics API
: 基礎的metrics,用以支援自動擴展機制的HPA (HorizontalPodAutoscaler)及VPA (VerticalPodAutoscaler)metrics-server
: 實現Metrics API
,參考文件進行安裝
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Resource Metrics Pipeline (重製官網圖片)
kubelet logs
抓取紀錄時,由kubelet讀取此log file回傳監控指標
container本身及有log功能,而經K8s pod的外層管理亦可抓取,如果container重啟,會保留一個終止container的logs;若整個pod都被踢出node,則對應的containers紀錄將不復存在
操作指令
# 顯示nodes及pods的cpu/memory 使用量
kubectl top <node/pod> <optional: name> -l <label>
# 取得pod及container的log
kubectl logs <pod_name>
# 多container時,須加以指定container 加上 -f 表示即時更新
kubectl logs <pod_name> -c <container_name>
kubectl 支援jsonPath模板,用於篩選JSON object的欄位,如此一來便可以將資訊加以整理。表達式單層時以雙引號""包裹,多層時,外層雙引號"",內層文字 (text)單引號'',而windows則外層都需使用雙引號,詳細說明查官網,大致的處理判斷如下:
range
及end
# 取得pod資料, 以jsonpath表達式篩選匯出內容
# 查找此物件的第0個item,的metadata,的name欄位
kubectl get pods -o=jsonpath='{.items[0].metadata.name}'
# 查找此物件的users,搜尋? 此物件@ 的name 為== "e2e",的user的password
kubectl get <某個資源> -o=jsonpath={.users[?(@.name=="e2e")].user.password}
# 迭代range所有*的 items,其metadata的name, tab, status的startTime,換行,結束(end
kubectl get pods -o=jsonpath="{range .items[*]}{.metadata.name}{'\t'}{.status.startTime}{'\n'}{end}"
在KodeKloud上有免費的課程JSON Path Test - Free Course,包含基本的說明及lab環境可以練習,推薦新手入門!
REF.